package com.ruoyi.nlp.protocol;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * 使用此service时需要在注解上加入@lazy懒加载
 * 
 */
public interface INlpService {

	/**
	 * 关键词词典匹配
	 *
	 * @param text
	 * @return
	 */
	public List<String> segByKeywords(String text);

	/**
	 * 基于普通词表+叙词表分词
	 *
	 * @return 返回所有分词
	 */
	public List<String> segByAllWords(String text);

	/**
	 * 基于普通词表+叙词表分词
	 *
	 * @return 返回所有分词+颜色
	 */
	public List<HashMap<String, Object>> segByAllWordsColor(String text);

	/**
	 * 基于普通词表+叙词表标注
	 *
	 * @param title
	 * @param keywords
	 * @param summary
	 * @param text
	 * @param keywordsSeparator
	 * @param titleHeight
	 * @param keywordsHeight
	 * @param summaryHeight
	 * @param textHeight
	 * @param thresholdHeight
	 * @return 返回得分和词表列表
	 */
	public List<String> segHeightByAllWords(String title,
			String keywords, String summary, String text,
			String keywordsSeparator, double titleHeight,
			double keywordsHeight, double summaryHeight, double textHeight,
			double thresholdHeight);

	/**
	 * 基于普通词表+叙词表标注
	 * @param title
	 * @param keywords
	 * @param summary
	 * @param text
	 * @param keywordsSeparator
	 * @param titleHeight
	 * @param keywordsHeight
	 * @param summaryHeight
	 * @param textHeight
	 * @param topNumber
	 * @return 按top值返回
	 */
	public List<String> segHeightByAllWords(String title,
			String keywords, String summary, String text,
			String keywordsSeparator, double titleHeight,
			double keywordsHeight, double summaryHeight, double textHeight,
			int topNumber);

	/**
	 * 基于普通词表分词
	 *
	 * @return 返回标注分词
	 */
	public List<String> segByGeneralWords(String text);

	/**
	 * 基于叙词表分词
	 *
	 * @return 返回标注分词
	 */
	public List<String> segByThesauriWords(String text);

	/**
	 * 获得词性类别
	 *
	 * @return
	 */
	public List<HashMap<String, String>> getAllPosCategory();

	/**
	 * 获得依存关系类别
	 *
	 * @return
	 */
	public List<HashMap<String, String>> getAllDependency();

	/**
	 * 词性标注
	 *
	 * @param text
	 * @return
	 */
	public List<HashMap<String, Object>> posTagging(String text);

	/**
	 * 基于词表标注
	 *
	 * @param text
	 * @return
	 */
	public List<HashMap<String, Object>> posTaggingByWords(String text);

	/**
	 * 实体识别
	 *
	 * @param text
	 * @return
	 */
	public List<HashMap<String, Object>> recognizeEntity(String text);

	/**
	 * 依存句法分析
	 *
	 * @param text
	 * @return
	 */
	public List<HashMap<String, Object>> dependencyParser(String text);

	/**
	 * 自动摘要
	 *
	 * @param text
	 * @param count
	 *            需要的关键句的个数
	 * @return
	 */
	public List<String> autoSummary(String text, int count);

	/**
	 * 关键词提取
	 *
	 * @param text
	 * @param count
	 *            希望提取几个关键词
	 * @return
	 */
	public List<String> autoKeyword(String text, int count);

	/**
	 * 语义联想(语义距离)
	 *
	 * @param words
	 * @param word
	 * @return
	 */
	public List<HashMap<String, Object>> wordDistance(String[] words,
			String word);

	/**
	 * 根据词典里的词标引词
	 * @param words 词集合
	 * @param maxWordLength 集合里最大词长度
	 * @param text 待标引词
	 * @return
	 */
	public List<String> segBywords(List<String> words,int maxWordLength,String text);

	/**
	 * 从文本里抽词
	 * @param text 待分析文本
	 * @param maxLen 分词最大长度
	 * @param minCiPin 最小词频指标
	 * @param zyd 自由度指标
	 * @param ngd 凝固度指标
	 * @return
	 */
	public List<Map<String,Object>> bulidWords(String text,int maxLen,int minCiPin,double zyd,int ngd) throws IOException;

	/**
	 * 新词发现
	 * @param text
	 * @param limit
	 * @return
	 */
	public List<String> automaticTextClassification(String text, int limit);

	/**
	 * 新词发现
	 * @param text
	 * @param limit
	 * @return
	 */
	public Map<String,String> getClassAndCode(String title,String summary,String keywords,String text);

	/**
	 * 通过复数形式返回专业词汇
	 * @param wordPlurals
	 * @return
	 */
	public String getWordByPlurals(String wordPlurals);

	/**
	 * 通过复数形式返回专业词汇
	 * @param wordStop
	 * @return
	 */
	public boolean getWordByStop(String wordStop);

}
